iT邦幫忙

2025 iThome 鐵人賽

DAY 7
1
自我挑戰組

用 C++ 實作簡易第一人稱視角遊戲:從入門到理解 Ray Casting系列 第 7

Day 7 | Ray Casting 前置 : fPlayerA, AoV ─ 玩家方向 及 視野範圍

  • 分享至 

  • xImage
  •  

大家好啊~ 這裡是鐵匠史密斯,
既然我們已經知道了玩家的位置 fXPlayerfYPlayer 以及其視野 screen
那接下來就要介紹: 玩家的視野方向 fPlayerA ,以及視野範圍 AOV
!!重要,在本程式中,我們會以 [rad] 、 而非 [degree],來表示角度單位

往哪裡看? ─ 玩家視野方向 fPlayerA

根據命名 fPlayerA 可知,它代表玩家的朝向,即玩家視線的方向(以 [rad]、 [degree]為單位)
老樣子,上圖~
https://ithelp.ithome.com.tw/upload/images/20250807/201576530H7UolNMiS.png

上圖可知,我們假設玩家看的方向 fPlayerA = 0

float fPlayerA{ 0.0f };

那你一定會詢問,為什麼0 [rad] 是往下(+y 方向)看呢?
其實沒有一定的規定,但這會影響到玩家移動的方向、以及Ray Casting中光線的方向
我們先假設 fPlayerA = 0玩家看向地圖 +y 方向

看的範圍是多少? ─ 玩家視野範圍 AoV

AoV, 又稱 Angle of View ─ 玩家的視野範圍(以 [rad]、 [degree]為單位)
常常有人會把AoV(Angle of View) 以及 FoV(Field of View) 搞混,其實
FoV(Field of View, 視場) 也就是 screen
可以參考光學相關的Reference: FOV and AOV

好的,帶回來AoV,我們在程式中以 AOV 表示視野範圍,並以 [rad] 表示其單位
假設初始的AOV 為 45 [degree],也就是 𝝅 / 4 [rad],初始化為:

float fFOV{ 3.14157 / 4.0 };

畢竟𝝅是無理數...所以,對我們只能初始化大概的數值就好,所以,在地圖中,
玩家看到的視野範圍如圖:
https://ithelp.ithome.com.tw/upload/images/20250807/20157653WH6bBzpYOD.png

於AOV內定義 +/- 角度

我們進一步探討AOV,
javidx9 大神在影片中,為了確立左/右 半邊視野,令
視野中心為0 degree,
左半邊為 -AOV/2 degree
右半邊為 AOV/2 degree

直接上圖,我們以玩家Player 為翻轉,以他的正視方向來看AoV

https://ithelp.ithome.com.tw/upload/images/20250807/20157653bIWGmYhR1S.png

可以看到,在玩家正視方向,左半邊視角為負,右半邊視角為正

!!! 重要: 視角的角度 ≠ 玩家方向的角度 !!! 兩者改變方向的邏輯不同

今日總結 :

  • fPlayerA 玩家方向的定義
  • AoV 玩家視野的定義
  • AoV 左半邊/右半邊視野的 正/負 定義

明日會講解**fPlayerA 玩家方向的改變原理**,途中也會講到
fPlayerA 玩家方向 以及 AOV 的正負區別
旅行還很長,再多走個幾里路,加油!!

Reference :

  1. FOV and AOV

上一篇
Day 6 | Ray Casting 前置 : screen ─ 玩家視野
下一篇
Day 8 | Ray Casting 前置 : fPlayerA ─ 如何改變玩家方向
系列文
用 C++ 實作簡易第一人稱視角遊戲:從入門到理解 Ray Casting30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言